HAL CCB compute ECDSA signature using software key ¶
Sequence diagram ¶
Code snippet ¶
|
HAL1 |
HAL2 |
|---|---|
CCB_HandleTypeDef hccb;
CCB_WrappingKeyTypeDef wrappedKeyConf;
CCB_ECDSACurveParamTypeDef ECDSAparam;
CCB_ECDSAKeyBlobTypeDef ECDSAKeyBlob;
CCB_ECDSASignTypeDef Signature;
CCB_ECCMulPointTypeDef publickeyOut;
/* Initialize the CCB peripheral */
HAL_CCB_Init(&hccb);
/* Configure Wrapped Key */
wrappedKeyConf.WrappingKeyType = HAL_CCB_USER_KEY_WRAPPED;
wrappedKeyConf.pInitVect = AESIV;
wrappedKeyConf.AES_Algorithm = CCB_AES_CBC;
wrappedKeyConf.pUserWrappedWrappingKey = Wrapped_key_Buffer;
HAL_CCB_ECDSA_WrapSymmetricKey(&hccb, Symetric_AESKey256, &wrappedKeyConf);
/* Prepare ECDSA out parameters */
ECDSAKeyBlob.pIV = IV_Buffer;
ECDSAKeyBlob.pTag = TAG_Buffer;
ECDSAKeyBlob.pWrappedKey = PrivateKey_encrypted_192;
/* Fill ECDSA parameters */
ECDSAparam.primeOrderSizeByte = ecdsa192_n_length;
ECDSAparam.modulusSizeByte = ecdsa192_p_length;
ECDSAparam.coefSignA = ecdsa192_a_sign;
ECDSAparam.pAbsCoefA = ecdsa192_a_abs;
ECDSAparam.pCoefB = ecdsa192_b;
ECDSAparam.pModulus = ecdsa192_p;
ECDSAparam.pPrimeOrder = ecdsa192_n;
ECDSAparam.pPointX = ecdsa192_Gx;
ECDSAparam.pPointY = ecdsa192_Gy;
HAL_CCB_ECDSA_WrapPrivateKey(&hccb, &ECDSAparam, ecdsa192_Prvt_keyP, &wrappedKeyConf, &ECDSAKeyBlob);
/* Prepare signature field */
Signature.pSSign = ECDSASout_192;
Signature.pRSign = ECDSARout_192;
HAL_CCB_ECDSA_Sign(&hccb, &ECDSAparam, &wrappedKeyConf, &ECDSAKeyBlob, ECDSAHash_192, &Signature);
/* Blob use for signing public key computation */
publickeyOut.pPointX = PublicKeyXout_192;
publickeyOut.pPointY = PublicKeyYout_192;
HAL_CCB_ECDSA_ComputePublicKey(&hccb, &ECDSAparam, &wrappedKeyConf, &ECDSAKeyBlob, &publickeyOut);
|
hal_ccb_handle_t hccb;
hal_ccb_wrapping_sw_key_context_t wrappedKeyConf;
hal_ccb_ecdsa_curve_param_t ECDSAparam;
hal_ccb_ecdsa_key_blob_t ECDSAKeyBlob;
hal_ccb_ecdsa_sign_t Signature;
hal_ccb_ecc_point_t publickeyOut;
/* Initialize the CCB peripheral */
HAL_CCB_Init(&hccb, HAL_CCB);
/* Configure wrapped key */
wrappedKeyConf.p_init_vect = AESIV;
wrappedKeyConf.aes_algorithm = CCB_AES_CBC;
wrappedKeyConf.key_size = 256;
HAL_CCB_ECDSA_WrapSymmetricKey(&hccb, Symetric_AESKey256, &wrappedKeyConf, Wrapped_key_Buffer);
/* Prepare ECDSA out parameters */
ECDSAKeyBlob.p_iv = IV_Buffer;
ECDSAKeyBlob.p_tag = TAG_Buffer;
ECDSAKeyBlob.p_wrapped_key = PrivateKey_encrypted_192;
/* Fill ECDSA parameters */
ECDSAparam.prime_order_size_byte = ecdsa192_n_length;
ECDSAparam.modulus_size_byte = ecdsa192_p_length;
ECDSAparam.coef_sign_a = ecdsa192_a_sign;
ECDSAparam.p_abs_coef_a = ecdsa192_a_abs;
ECDSAparam.p_coef_b = ecdsa192_b;
ECDSAparam.p_modulus = ecdsa192_p;
ECDSAparam.p_prime_order = ecdsa192_n;
ECDSAparam.p_point_x = ecdsa192_Gx;
ECDSAparam.p_point_y = ecdsa192_Gy;
ECDSAparam.ecdsa_pool_buffer.p_buff = ccb_pool_buffer;
ECDSAparam.ecdsa_pool_buffer.buff_size_byte = HAL_CCB_ECDSA_CALC_BUFFER_SIZE(ecdsa192_p_length);
HAL_CCB_ECDSA_SW_WrapPrivateKey(&hccb, &ECDSAparam, ecdsa192_Prvt_keyP, &wrappedKeyConf, Wrapped_key_Buffer, &ECDSAKeyBlob);
/* Prepare signature field */
Signature.p_s_sign = ECDSASout_192;
Signature.p_r_sign = ECDSARout_192;
HAL_CCB_ECDSA_SW_Sign(&hccb, &ECDSAparam, &wrappedKeyConf, Wrapped_key_Buffer, &ECDSAKeyBlob, ECDSAHash_192, 24, &Signature);
/* Blob use for signing public key computation */
publickeyOut.p_point_x = PublicKeyXout_192;
publickeyOut.p_point_y = PublicKeyYout_192;
HAL_CCB_ECDSA_SW_ComputePublicKey(&hccb, &ECDSAparam, &wrappedKeyConf, Wrapped_key_Buffer, &ECDSAKeyBlob, &publickeyOut);
|

